import axios from 'axios'
import type { AxiosRequestConfig } from 'axios'
import { ElMessage } from 'element-plus'

// mockAjax配置类型
export interface CallApiConfig {
  api: string
  method?: string
  param?: Record<string, any>
  config?: AxiosRequestConfig
}

// 创建axios实例
let instance = axios.create({
  baseURL: '/mock',
  timeout: 500 * 1000,
  headers: {
    'Content-Type': 'application/json; charset=UTF-8',
  },
})

// request 拦截器
instance.interceptors.request.use(
  (config: any) => {
    // 对应请求数据做点什么，身份验证
    // console.log("request 拦截器", config);

    return config
  },
  (error: any) => {
    // 对请求错误做些什么
    return Promise.reject(error)
  },
)

// response 拦截器
instance.interceptors.response.use(
  (response: any) => {
    // 对响应数据做点什么
    console.log('response 拦截器')
    return response.data
  },
  (error: any) => {
    // 对响应错误做点什么
    return Promise.reject(error)
  },
)

/**
 * 配置请求api
 * @param {string} api 接口名
 * @param {string} param 接口入参
 * @param {string} config 自定义config配置
 */
const mockAjax = ({ api, param = {}, config = {} }: CallApiConfig) => {
  config.method = config.method ? config.method : 'post'
  Object.assign(config, { url: api, data: param })

  return instance(config)
    .then((res: any) => {
      return res
    })
    .catch((error) => {
      return Promise.reject(error)
    })
}

export default mockAjax
